package design._03_prototype.shallow1;

/** 
 * 浅拷贝 ：就是拷贝对象被重新创建，但是拷贝对象的成员变量仍然遵顼Java值传递机制
	即  基本类型的成员拷贝的是值本身，引用类型的成员拷贝的是引用对象的地址值。
	即  拷贝对象的引用类型成员 与 被拷贝对象的引用类型成员 他们指向同一块内存（对象）。
 * 
 * 浅克隆(ShallowClone)和深克隆(DeepClone)。
 * 浅拷贝的实现
 * 		能够实现克隆的Java类必须实现一个标识接口Cloneable，表示这个Java类支持被复制。 即才能调用Object的clone()方法
 * 				Object  充当抽象原型类                      Cloneable 是对克隆的支持
 * 
 * 
 *	注意 ：  
 *		在Java语言中，
 *			通过覆盖Object类的clone()方法可以实现浅克隆。 
 *			深克隆，可以通过序列化(Serialization)等方式来实现
 */
public class WeeklyLog extends Object implements Cloneable {
	private String name;
	private String date;
	private String content;
	
	//为了简化设计和实现，假设一份工作周报中只有一个附件对象，实际情况中可以包含多个附件，可以通过List等集合对象来实现
	private Attachment attachment;
	
	//克隆方法clone()，此处使用Java语言提供的克隆机制
	@Override
	public WeeklyLog clone(){
		Object obj = null;
		try{
			obj = super.clone();
			return (WeeklyLog)obj;
		}catch(CloneNotSupportedException e){
			System.out.println("不支持复制！");
			return null;
		}
	}
	
	public void setAttachment(Attachment attachment) {
		this.attachment = attachment;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
	public Attachment getAttachment(){
		return (this.attachment);
	}
	
	public String getName() {
		return (this.name);
	}
	public String getDate() {
		return (this.date);
	}
	public String getContent() {
		return (this.content);
	}
}
